#pragma once

#include <AST/expr/literal/LiteralAST.hpp>

class Float : public Literal {
  protected:
    using APFloat = llvm::APFloat;

  public:
    const double val;

    Float(double val);
    
    virtual Type *getType() override;

    virtual Constant *codegen() override;

    static Value *getDefault();

    friend class graphviz::GraphGenerator;

    virtual VisitResult accept(ASTVisitor &visitor) const override {
        return visitor.visitFloatAST(this);
    }
};

typedef Float Double;
